import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
import { createId } from '@paralleldrive/cuid2';

// 用户表
export const users = sqliteTable('users', {
  id: text('id').primaryKey().$defaultFn(() => createId()),
  email: text('email').notNull().unique(),
  name: text('name'),
  passwordHash: text('password_hash'),
  avatar: text('avatar'),
  plan: text('plan', { enum: ['free', 'pro'] }).notNull().default('free'),
  planExpiredAt: integer('plan_expired_at', { mode: 'timestamp' }),
  createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
  updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
});

// 文章表
export const articles = sqliteTable('articles', {
  id: text('id').primaryKey().$defaultFn(() => createId()),
  userId: text('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
  title: text('title').notNull(),
  content: text('content').notNull(),
  status: text('status', { enum: ['draft', 'published'] }).notNull().default('draft'),
  wordCount: integer('word_count').default(0),
  readingTime: integer('reading_time').default(0), // 预计阅读时间（分钟）
  createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
  updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
});

// 发布记录表
export const publishRecords = sqliteTable('publish_records', {
  id: text('id').primaryKey().$defaultFn(() => createId()),
  articleId: text('article_id').notNull().references(() => articles.id, { onDelete: 'cascade' }),
  userId: text('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
  platform: text('platform', { enum: ['wechat', 'zhihu', 'juejin', 'zsxq'] }).notNull(),
  status: text('status', { enum: ['pending', 'success', 'failed'] }).notNull().default('pending'),
  platformArticleId: text('platform_article_id'), // 平台返回的文章ID
  platformUrl: text('platform_url'), // 发布后的URL
  publishedAt: integer('published_at', { mode: 'timestamp' }),
  createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
});

// 发布预设表
export const publishPresets = sqliteTable('publish_presets', {
  id: text('id').primaryKey().$defaultFn(() => createId()),
  userId: text('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
  name: text('name').notNull(), // 预设名称
  platform: text('platform').notNull().default('wechat'), // 目标平台: wechat, zhihu, juejin, zsxq
  isDefault: integer('is_default', { mode: 'boolean' }).default(false), // 是否为默认预设

  // 作者信息
  authorName: text('author_name'), // 作者名称

  // 核心功能设置
  autoGenerateDigest: integer('auto_generate_digest', { mode: 'boolean' }).default(true), // 是否启用AI摘要

  // 通用内容字段（向后兼容）
  headerContent: text('header_content'), // 开头定制内容（Markdown）
  footerContent: text('footer_content'), // 末尾定制内容（Markdown）

  // 平台特定配置（JSON格式）
  platformConfig: text('platform_config'), // 存储平台特定的配置，如知乎的专栏、标签等

  createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
  updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
});

// 兑换码表
export const redeemCodes = sqliteTable('redeem_codes', {
  id: text('id').primaryKey().$defaultFn(() => createId()),
  code: text('code').notNull().unique(), // 兑换码
  type: text('type', { enum: ['monthly', 'yearly'] }).notNull(), // 兑换码类型：月卡、年卡
  duration: integer('duration').notNull(), // 时长（月数）
  isUsed: integer('is_used', { mode: 'boolean' }).notNull().default(false), // 是否已使用
  usedBy: text('used_by').references(() => users.id), // 使用者用户ID
  usedAt: integer('used_at', { mode: 'timestamp' }), // 使用时间
  createdBy: text('created_by'), // 创建者（管理员标识）
  note: text('note'), // 备注信息
  createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
});

// 图片使用统计表
export const imageUsageStats = sqliteTable('image_usage_stats', {
  id: text('id').primaryKey().$defaultFn(() => createId()),
  userId: text('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
  month: text('month').notNull(), // 格式：YYYY-MM
  usedCount: integer('used_count').notNull().default(0), // 当月已使用的图片数量
  createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
  updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
});

// 类型导出
export type User = typeof users.$inferSelect;
export type NewUser = typeof users.$inferInsert;
export type Article = typeof articles.$inferSelect;
export type NewArticle = typeof articles.$inferInsert;
export type PublishRecord = typeof publishRecords.$inferSelect;
export type NewPublishRecord = typeof publishRecords.$inferInsert;
export type PublishPreset = typeof publishPresets.$inferSelect;
export type NewPublishPreset = typeof publishPresets.$inferInsert;
export type RedeemCode = typeof redeemCodes.$inferSelect;
export type NewRedeemCode = typeof redeemCodes.$inferInsert;
export type ImageUsageStat = typeof imageUsageStats.$inferSelect;
export type NewImageUsageStat = typeof imageUsageStats.$inferInsert;
